﻿using BLevy.Entidad;
using BLevy.Negocio;
using BLevy.UI.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmGruposFamiliares : Form
    {
        private int socio_id { get; set; }
        private string operacion { get; set; }
        private CuentaBancaria _cuenta_bancaria { get; set; }

        private bool guardo = false;

        private List<Adherente> _adherentes = new List<Adherente>();

        public frmGruposFamiliares()
        {
            InitializeComponent();
        }

        public frmGruposFamiliares(int id, string _operacion)
        {
            socio_id = id;
            operacion = _operacion;
            InitializeComponent();
        }

        private void IniciarControles()
        {
            btnCuenta.Enabled = false;
            txtAdicional.Text = string.Empty;
            txtApellido.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            txtCuota.Text = string.Empty;
            txtDireccion.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            txtEdad.Text = string.Empty;
            txtNombres.Text = string.Empty;
            txtObservaciones.Text = string.Empty;
            txtTelefono.Text = string.Empty;
            txtEdad.Text = string.Empty;
            //txtCodigo.Enabled = false;
            txtEmail.Text = string.Empty;
            txtConvenio.Text = string.Empty;
            txtBonificacion.Text = "0.00";
            txtRecargo.Text = "0.00";
            txtCuotaFija.Text = "0.00";

            this.ActiveControl = txtCodigo;
            ckbActivo.CheckState = CheckState.Checked;
            dtpVigencia.Enabled = false;
            btnReeimprimirCertificado.Enabled = false;
            btnServicioSolicitud.Enabled = false;

            _adherentes.Clear();

            dgvAdherentes.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvCuenta.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            //CalcularCarencia(dtpFechaIng.Value, );
        }

        private void DeshabilitarControles()
        {
            txtAdicional.Enabled = false;
            txtApellido.Enabled = false;
            txtCodigo.Enabled = false;
            txtCuota.Enabled = false;
            txtDireccion.Enabled = false;
            txtDocumento.Enabled = false;
            txtEdad.Enabled = false;
            txtNombres.Enabled = false;
            txtObservaciones.Enabled = false;
            txtTelefono.Enabled = false;
            cmbFormasPago.Enabled = false;
            cmbLocalidad.Enabled = false;
            cmbPlan.Enabled = false;
            cmbZona.Enabled = false;
            btnGuardar.Enabled = false;
            dtpFechaIng.Enabled = false;
            dtpFechaNac.Enabled = false;
            dtpFechaPosibleCobro.Enabled = false;
            dtpFechaVen.Enabled = false;
            txtEmail.Enabled = false;
            txtConvenio.Enabled = false;
            ckbActivo.Enabled = false;
            ckbPami.Enabled = false;
            txtRecargo.Enabled = false;
            txtBonificacion.Enabled = false;
            txtCuotaFija.Enabled = false;
        }

        private void frmGruposFamiliares_Load(object sender, EventArgs e)
        {
            try
            {
                IniciarControles();
                GetLocalidades();
                GetFormasPago();
                GetPlanes();

                txtCuotaFija.Enabled = false;
                txtBonificacion.Enabled = false;
                txtRecargo.Enabled = false;

                if (string.IsNullOrEmpty(operacion))
                {
                    lblProximoNumeroCert.Text = "(Próximo Nro. Cert.: " + GetProximoNumeroCertificado().ToString() + ")";
                }

                if (operacion == "DETALLE")
                {
                    DeshabilitarControles();
                    btnRegistarAdherente.Enabled = false;
                    btnReeimprimirCertificado.Enabled = true;
                    btnServicioSolicitud.Enabled = true;
                    lblProximoNumeroCert.Visible = false;
                    Socio socio = GetSocioById(socio_id);

                    txtCodigo.Text = socio.numero_certificado.ToString();
                    txtApellido.Text = socio.apellido;
                    txtNombres.Text = socio.nombres;
                    txtDocumento.Text = socio.documento;
                    txtDireccion.Text = socio.direccion;
                    txtAdicional.Text = socio.adicional;
                    txtTelefono.Text = socio.telefono;
                    dtpFechaNac.Value = socio.fecha_nacimiento;
                    dtpFechaIng.Value = socio.fecha_ingreso;
                    dtpFechaVen.Value = socio.fecha_vencimiento;
                    dtpFechaPosibleCobro.Value = socio.fecha_ultimopago;
                    txtObservaciones.Text = socio.observaciones;
                    dtpFechaPosibleCobro.Value = socio.fecha_posiblecobro;
                    txtEmail.Text = socio.email;
                    txtConvenio.Text = socio.convenio;
                    ckbActivo.Checked = Convert.ToBoolean(socio.activo);
                    ckbPami.Checked = Convert.ToBoolean(socio.pami);
                    txtEdad.Text = socio.edad.ToString();
                    txtBonificacion.Text = String.Format("{0:N2}", socio.bonificacion);
                    txtRecargo.Text = String.Format("{0:N2}", socio.recargo);
                    socio.localidad = Localidades.FindById(socio.localidad_id);
                    cmbLocalidad.Text = socio.localidad.localidad;
                    txtCuotaFija.Text = String.Format("{0:N2}", socio.cuota);
                    socio.zona = Negocio.Zonas.FindById(socio.zona_id);
                    cmbZona.Text = socio.zona.zona;
                    chkFijarCosto.Checked = Convert.ToBoolean(socio.cuotafija);

                    socio.plan = Planes.FindById(socio.plan_id);
                    cmbPlan.Text = socio.plan.nombre;

                    socio.formapago = FormasPagos.FindById(socio.formapago_id);
                    cmbFormasPago.Text = socio.formapago.forma_pago;

                    //ObtenerAdherentes
                    IList<Adherente> adherentes = Adherentes.FindByIdSocio(socio.id);
                    _adherentes = adherentes.ToList();

                    dgvAdherentes.Rows.Clear();
                    foreach (Adherente fila in adherentes)
                    {
                        dgvAdherentes.Rows.Add(fila.id, fila.apellido, fila.nombres, fila.fecha_nacimiento.ToShortDateString(), CalcularEdad(fila.fecha_nacimiento), fila.documento, fila.fecha_ingreso.ToShortDateString(), fila.vigencia.ToShortDateString(), fila.parentesco, fila.localidad.id, fila.localidad.localidad, fila.zona.id, fila.zona.zona);
                    }

                    dgvAdherentes.Enabled = false;

                    //si la forma de pago es debito, traigo la cuenta
                    if (socio.formapago.debito_automatico == 1)
                    {
                        _cuenta_bancaria = socio.cuenta_bancaria;
                        socio.cuenta_bancaria.localidad = Localidades.FindById(socio.cuenta_bancaria.localidad_id);
                        socio.cuenta_bancaria.zona = Negocio.Zonas.FindById(socio.cuenta_bancaria.zona_id);

                        dgvCuenta.Rows.Clear();
                        dgvCuenta.Rows.Add(socio.cuenta_bancaria.id, socio.cuenta_bancaria.apellido, socio.cuenta_bancaria.nombres,
                             socio.cuenta_bancaria.documento, socio.cuenta_bancaria.localidad.id, socio.cuenta_bancaria.localidad.localidad,
                             socio.cuenta_bancaria.zona.id, socio.cuenta_bancaria.zona.zona, socio.cuenta_bancaria.telefono, socio.cuenta_bancaria.cbu);
                    }

                    dgvCuenta.Enabled = false;

                    //Obtener listado de servicios solicitados
                    dgvServicios.Rows.Clear();
                    string grupoFamiliar = string.Empty;
                    grupoFamiliar = socio.id.ToString();
                    foreach (Adherente adherente in _adherentes)
                    {
                        grupoFamiliar += ", " + adherente.id.ToString();
                    }

                    IList<ServicioSocio> serviciosL = Servicios.FindServiciosByGrupoFamiliar(grupoFamiliar);
                    foreach (ServicioSocio _servicioSocio in serviciosL)
                    {
                        dgvServicios.Rows.Add(_servicioSocio.id, _servicioSocio.fecha.ToShortDateString(), _servicioSocio.socio_id, _servicioSocio.beneficiario, _servicioSocio.servicio.servicio, _servicioSocio.direccion_salida, _servicioSocio.direccion_destino, _servicioSocio.medico, _servicioSocio.observaciones);
                    }



                    CalcularCostoPlan();
                }

                if (operacion == "EDITAR")
                {
                    lblProximoNumeroCert.Visible = false;
                    btnReeimprimirCertificado.Enabled = true;
                    btnServicioSolicitud.Enabled = true;

                    Socio socio = GetSocioById(socio_id);

                    txtCodigo.Text = socio.numero_certificado.ToString();
                    txtApellido.Text = socio.apellido;
                    txtNombres.Text = socio.nombres;
                    txtDocumento.Text = socio.documento;
                    txtDireccion.Text = socio.direccion;
                    txtAdicional.Text = socio.adicional;
                    txtTelefono.Text = socio.telefono;
                    dtpFechaNac.Value = socio.fecha_nacimiento;
                    dtpFechaIng.Value = socio.fecha_ingreso;
                    dtpFechaVen.Value = socio.fecha_vencimiento;
                    dtpFechaPosibleCobro.Value = socio.fecha_posiblecobro;
                    txtObservaciones.Text = socio.observaciones;
                    txtEmail.Text = socio.email;
                    txtConvenio.Text = socio.convenio;
                    ckbActivo.Checked = Convert.ToBoolean(socio.activo);
                    ckbActivo.Enabled = false;
                    ckbPami.Checked = Convert.ToBoolean(socio.pami);
                    txtEdad.Text = socio.edad.ToString();
                    txtBonificacion.Text = String.Format("{0:N2}", socio.bonificacion);
                    txtRecargo.Text = String.Format("{0:N2}", socio.recargo);
                    txtCuotaFija.Text = String.Format("{0:N2}", socio.cuota);
                    chkFijarCosto.Checked = Convert.ToBoolean(socio.cuotafija);




                    socio.localidad = Localidades.FindById(socio.localidad_id);
                    cmbLocalidad.Text = socio.localidad.localidad;

                    socio.zona = Negocio.Zonas.FindById(socio.zona_id);
                    cmbZona.Text = socio.zona.zona;

                    socio.plan = Planes.FindById(socio.plan_id);
                    cmbPlan.Text = socio.plan.nombre;

                    socio.formapago = FormasPagos.FindById(socio.formapago_id);
                    cmbFormasPago.Text = socio.formapago.forma_pago;

                    //ObtenerAdherentes
                    IList<Adherente> adherentes = Adherentes.FindByIdSocio(socio.id);
                    _adherentes = adherentes.ToList();

                    dgvAdherentes.Rows.Clear();
                    foreach (Adherente fila in adherentes)
                    {
                        dgvAdherentes.Rows.Add(fila.id, fila.apellido, fila.nombres, fila.fecha_nacimiento.ToShortDateString(), CalcularEdad(fila.fecha_nacimiento), fila.documento, fila.fecha_ingreso.ToShortDateString(), fila.vigencia.ToShortDateString(), fila.parentesco, fila.localidad.id, fila.localidad.localidad, fila.zona.id, fila.zona.zona);
                    }

                    //si la forma de pago es debito, traigo la cuenta
                    if (socio.formapago.debito_automatico == 1)
                    {
                        _cuenta_bancaria = socio.cuenta_bancaria;
                        socio.cuenta_bancaria.localidad = Localidades.FindById(socio.cuenta_bancaria.localidad_id);
                        socio.cuenta_bancaria.zona = Negocio.Zonas.FindById(socio.cuenta_bancaria.zona_id);

                        dgvCuenta.Rows.Clear();
                        dgvCuenta.Rows.Add(socio.cuenta_bancaria.id, socio.cuenta_bancaria.apellido, socio.cuenta_bancaria.nombres,
                            socio.cuenta_bancaria.documento, socio.cuenta_bancaria.localidad.id, socio.cuenta_bancaria.localidad.localidad,
                            socio.cuenta_bancaria.zona.id, socio.cuenta_bancaria.zona.zona, socio.cuenta_bancaria.telefono, socio.cuenta_bancaria.cbu);
                    }

                    //Obtener listado de servicios solicitados
                    dgvServicios.Rows.Clear();
                    string grupoFamiliar = string.Empty;
                    grupoFamiliar = socio.id.ToString();
                    foreach (Adherente adherente in _adherentes)
                    {
                        grupoFamiliar += ", " + adherente.id.ToString();
                    }

                    IList<ServicioSocio> serviciosL = Servicios.FindServiciosByGrupoFamiliar(grupoFamiliar);
                    foreach (ServicioSocio _servicioSocio in serviciosL)
                    {
                        dgvServicios.Rows.Add(_servicioSocio.id, _servicioSocio.fecha.ToShortDateString(), _servicioSocio.socio_id, _servicioSocio.beneficiario, _servicioSocio.servicio.servicio, _servicioSocio.direccion_salida, _servicioSocio.direccion_destino, _servicioSocio.medico, _servicioSocio.observaciones);
                    }


                }

                if (string.IsNullOrEmpty(operacion))
                {
                    btnBajaSocio.Enabled = false;
                    btnImprimirCupon.Enabled = false;
                    btnRegistrarCobro.Enabled = false;
                }

                if (!String.IsNullOrEmpty(operacion))
                {
                    CalcularCostoPlan();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void CalcularCarencia(DateTime fecha_ingreso, int edad)
        {
            if (edad == -1)
                edad = 0;
            try
            {
                Carencia carencia = Carencias.FindByEdad(edad);

                DateTime fecha_cobertura = fecha_ingreso.AddMonths(carencia.periodo);
                dtpVigencia.Value = fecha_cobertura;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private long GetProximoNumeroCertificado()
        {
            long numero_certificado = 0;

            try
            {
                numero_certificado = Negocio.Socios.FindNextNumeroCertificado();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return numero_certificado + 1;
        }

        private Socio GetSocioById(int id)
        {
            Socio socio = null;

            try
            {
                socio = Negocio.Socios.FindByIdConLocalidadZonaPlanFormaPago(id);
                socio.formapago = FormasPagos.FindById(socio.formapago_id);
                if (socio.formapago.debito_automatico == 1)
                    socio.cuenta_bancaria = CuentasBancarias.FindByIdSocio(socio.id);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return socio;
        }

        public string CalcularEdad(DateTime cumpleanos)
        {
            DateTime actual = DateTime.Today;
            int edad = actual.Year - cumpleanos.Year;
            if (actual < cumpleanos.AddYears(edad)) edad--;

            return edad.ToString();
        }

        private void GetLocalidades()
        {
            try
            {
                cmbLocalidad.ValueMember = "id";
                cmbLocalidad.DisplayMember = "localidad";
                cmbLocalidad.DataSource = Localidades.FindAll();

                if (cmbLocalidad.Items.Count != 0)
                {
                    GetZonas(Convert.ToInt32(cmbLocalidad.SelectedValue));
                }
                else
                {
                    cmbZona.DataSource = null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void GetZonas(int localidad_id)
        {
            try
            {
                cmbZona.ValueMember = "id";
                cmbZona.DisplayMember = "zona";
                cmbZona.DataSource = Negocio.Zonas.FindAllPorLocalidad(localidad_id);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void GetPlanes()
        {
            try
            {
                cmbPlan.ValueMember = "id";
                cmbPlan.DisplayMember = "nombre";
                cmbPlan.DataSource = Planes.FindAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void GetFormasPago()
        {
            try
            {
                cmbFormasPago.ValueMember = "id";
                cmbFormasPago.DisplayMember = "forma_pago";
                cmbFormasPago.DataSource = FormasPagos.FindAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void HabilitarControles()
        {
            txtDireccion.Enabled = true;
            txtDocumento.Enabled = true;
            txtNombres.Enabled = true;
            txtObservaciones.Enabled = true;
            txtTelefono.Enabled = true;
            txtAdicional.Enabled = true;
            txtApellido.Enabled = true;
            cmbPlan.Enabled = true;
            cmbZona.Enabled = true;
            dtpFechaIng.Enabled = true;
            dtpFechaNac.Enabled = true;
            dtpFechaPosibleCobro.Enabled = true;
            dtpFechaVen.Enabled = true;
            txtBonificacion.Enabled = true;
            txtRecargo.Enabled = true;
        }

        private void LimpiarControles()
        {
            txtCuota.Text = string.Empty;
            txtDireccion.Text = string.Empty;
            txtDocumento.Text = string.Empty;
            txtNombres.Text = string.Empty;
            txtObservaciones.Text = string.Empty;
            txtTelefono.Text = string.Empty;
            txtAdicional.Text = string.Empty;
            txtApellido.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            dgvAdherentes.DataSource = null;
            txtEmail.Text = string.Empty;
            txtConvenio.Text = string.Empty;
            dtpFechaIng.Value = DateTime.Now;
            dtpFechaNac.Value = DateTime.Now;
            dtpFechaPosibleCobro.Value = DateTime.Now;
            dtpFechaVen.Value = DateTime.Now;
            dtpVigencia.Value = DateTime.Now;
            ckbActivo.CheckState = CheckState.Checked;
            ckbPami.CheckState = CheckState.Unchecked;
            txtEdad.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            txtRecargo.Text = "0.00";
            txtBonificacion.Text = "0.00";

            dgvAdherentes.Rows.Clear();
            _adherentes.Clear();

            GetLocalidades();
            GetPlanes();
            GetFormasPago();
        }

        private Boolean ValidarForm()
        {
            bool resultado = true;
            error.Clear();

            if (string.IsNullOrEmpty(txtCodigo.Text))
            {
                resultado = false;
                error.SetError(txtCodigo, "Debe completar el campo Nro. Certificado.");
            }
            if (String.IsNullOrEmpty(txtApellido.Text))
            {
                resultado = false;
                error.SetError(txtApellido, "Debe completar el campo Apellido.");
            }
            if (String.IsNullOrEmpty(txtNombres.Text))
            {
                resultado = false;
                error.SetError(txtNombres, "Debe completar el campo Nombres.");
            }
            if (String.IsNullOrEmpty(txtDocumento.Text))
            {
                txtDocumento.Text = "NO INFORMA";
            }
            if (String.IsNullOrEmpty(txtDireccion.Text))
            {
                resultado = false;
                error.SetError(txtDireccion, "Debe completar el campo Dirección.");
            }
            //if (String.IsNullOrEmpty(txtTelefono.Text))
            //{
            //    resultado = false;
            //    error.SetError(txtTelefono, "Debe completar el campo Teléfono.");
            //}
            if (string.IsNullOrEmpty(txtEdad.Text))
            {
                resultado = false;
                error.SetError(dtpFechaNac, "Debe completar el campo Edad.");
            }
            if (string.IsNullOrEmpty(txtEmail.Text))
            {
                txtEmail.Text = "NO INFORMA";
            }
            if (string.IsNullOrEmpty(txtConvenio.Text))
            {
                txtConvenio.Text = "NO INFORMA";
            }
            if (string.IsNullOrEmpty(txtTelefono.Text))
            {
                txtTelefono.Text = "NO INFORMA";
            }
            if (string.IsNullOrEmpty(txtObservaciones.Text))
            {
                txtObservaciones.Text = "NO INFORMA";
            }
            if (string.IsNullOrEmpty(txtAdicional.Text))
            {
                txtAdicional.Text = "NO INFORMA";
            }
            if (string.IsNullOrEmpty(txtBonificacion.Text))
            {
                txtBonificacion.Text = "0.00";
            }
            if (string.IsNullOrEmpty(txtRecargo.Text))
            {
                txtRecargo.Text = "0.00";
            }

            FormaPago forma_pago = (FormaPago)cmbFormasPago.SelectedItem;
            if (forma_pago.debito_automatico == 1)
            {
                if (dgvCuenta.Rows.Count == 0)
                {
                    resultado = false;
                    error.SetError(btnCuenta, "Debe indicar un número de Cuenta Bancaria.");
                }
            }

            return resultado;
        }

        private void txtDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtDocumento, "Solo se permiten números en el campo Documento.");
                e.Handled = true;
                return;
            }
        }

        private void txtTelefono_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != '-') && (e.KeyChar != '(') && (e.KeyChar != ')') && (e.KeyChar != (char)Keys.Space))
            {
                error.SetError(txtTelefono, "Solo se permiten números en el campo Teléfono.");
                e.Handled = true;
                return;
            }
        }

        private void dtpFechaNac_ValueChanged(object sender, EventArgs e)
        {
            string edad = CalcularEdad(Convert.ToDateTime(dtpFechaNac.Value));

            txtEdad.Text = edad;
        }

        private void RegistrarSocio()
        {
            try
            {
                Socio socio = new Socio();
                socio.numero_certificado = Convert.ToInt32(txtCodigo.Text);
                socio.activo = Convert.ToInt32(ckbActivo.CheckState);
                socio.apellido = txtApellido.Text;
                socio.direccion = txtDireccion.Text;
                socio.documento = txtDocumento.Text;
                socio.fecha_ingreso = dtpFechaIng.Value;
                socio.fecha_nacimiento = dtpFechaNac.Value;
                socio.fecha_ultimopago = dtpFechaPosibleCobro.Value;
                socio.fecha_vencimiento = dtpFechaVen.Value;
                socio.nombres = txtNombres.Text;
                socio.adicional = txtAdicional.Text;
                socio.observaciones = txtObservaciones.Text;
                socio.telefono = txtTelefono.Text;
                socio.zona_id = Convert.ToInt32(cmbZona.SelectedValue);
                socio.localidad_id = Convert.ToInt32(cmbLocalidad.SelectedValue);
                socio.plan_id = Convert.ToInt32(cmbPlan.SelectedValue);
                socio.formapago_id = Convert.ToInt32(cmbFormasPago.SelectedValue);
                socio.formapago = FormasPagos.FindById(Convert.ToInt32(cmbFormasPago.SelectedValue));
                socio.vigencia = dtpVigencia.Value;
                socio.convenio = txtConvenio.Text;
                socio.email = txtEmail.Text;
                socio.pami = Convert.ToInt32(ckbPami.CheckState);
                socio.edad = Convert.ToInt32(txtEdad.Text);
                socio.fecha_posiblecobro = dtpFechaPosibleCobro.Value;
                socio.recargo = Convert.ToDouble(txtRecargo.Text);
                socio.bonificacion = Convert.ToDouble(txtBonificacion.Text);
                socio.cuotafija = Convert.ToInt32(chkFijarCosto.Checked);

                socio.cuenta_bancaria = _cuenta_bancaria;
                socio.adherentes = _adherentes;

                long resultado = Negocio.Socios.Add(socio);
                if (resultado > 0)
                {
                    MessageBox.Show("Los datos se registraron correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    DialogResult result = MessageBox.Show("Desea imprimir el certificado de adhesión?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (result == System.Windows.Forms.DialogResult.Yes)
                    {
                        ImprimirCertificado(Convert.ToInt32(resultado));
                    }

                    LimpiarControles();
                    lblProximoNumeroCert.Text = "(Próximo Nro. Cert.: " + GetProximoNumeroCertificado().ToString() + ")";
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al registrar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            string codigo = txtCodigo.Text;
            string socio = txtApellido.Text + ", " + txtNombres.Text;

            DialogResult DialogEliminar = MessageBox.Show("Se va a dar de baja el Grupo Familiar: (" + codigo + " - Titular: " + socio + "), está seguro?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (DialogEliminar == System.Windows.Forms.DialogResult.Yes)
            {
                try
                {
                    frmSocioBaja frm = new frmSocioBaja(socio_id);
                    frm.Text = "Baja de Grupo Familiar: (" + codigo + " - Titular: " + socio + ")";

                    DialogResult dialog = frm.ShowDialog();
                    if (dialog == System.Windows.Forms.DialogResult.Yes)
                    {
                        this.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cmbLocalidad_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetZonas(Convert.ToInt32(cmbLocalidad.SelectedValue));
        }

        private void cmbLocalidad_SelectionChangeCommitted(object sender, EventArgs e)
        {
            GetZonas(Convert.ToInt32(cmbLocalidad.SelectedValue));
        }

        private void dtpFechaIng_ValueChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEdad.Text))
            {
                CalcularCarencia(dtpFechaIng.Value, Convert.ToInt32(txtEdad.Text));
            }
        }

        private void btnGuardar_Click_1(object sender, EventArgs e)
        {

            if (ValidarForm() == true)
            {
                //apreto el boton guardar
                guardo = true;

                if (string.IsNullOrEmpty(operacion))
                {
                    //verifico que el nro de certificado no exista
                    if (Negocio.Socios.VerificarNumeroCertificado(Convert.ToInt32(txtCodigo.Text)) == 0)
                    {
                        RegistrarSocio();
                    }
                }
                else
                {
                    if (operacion == "EDITAR")
                    {
                        ModificarSocio();
                    }
                }

            }
        }

        private void toolStripButton1_Click_1(object sender, EventArgs e)
        {
            try
            {
                frmAdherente frm = new frmAdherente();
                DialogResult result = frm.ShowDialog();
                if (result == System.Windows.Forms.DialogResult.OK)
                {
                    Adherente adherente = frm._adherente;
                    AgregarRegistroList(adherente);
                    ActualizarGrilla();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvAdherentes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvAdherentes.Rows.Count > 0)
            {
                //edicion de datos de la grilla de adherentes
                if (dgvAdherentes.Columns[e.ColumnIndex].Name == "editar")
                {
                    int fila = dgvAdherentes.CurrentRow.Index;

                    //no esta registrado en la db
                    if (Convert.ToInt32(dgvAdherentes.Rows[fila].Cells[0].Value) == 0)
                    {
                        try
                        {
                            frmAdherente frm = new frmAdherente(_adherentes[fila], "EDITAR", fila);
                            DialogResult resultado = frm.ShowDialog();
                            if (resultado == System.Windows.Forms.DialogResult.OK)
                            {
                                ModificarRegistroList(frm._adherente, fila);
                                ActualizarGrilla();
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    else // esta registrado en la db
                    {
                        try
                        {
                            frmAdherente frm = new frmAdherente(_adherentes[fila], "EDITAR", fila);
                            DialogResult resultado = frm.ShowDialog();
                            if (resultado == System.Windows.Forms.DialogResult.OK)
                            {
                                try
                                {
                                    ModificarRegistroList(frm._adherente, fila);
                                    ActualizarGrilla();
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }

                //baja de afiliados de la grilla adherentes
                if (dgvAdherentes.Columns[e.ColumnIndex].Name == "baja")
                {

                    int fila = dgvAdherentes.CurrentRow.Index;
                    try
                    {
                        string nombrecompleto = dgvAdherentes.Rows[fila].Cells[1].Value + ", " + dgvAdherentes.Rows[fila].Cells[2].Value;
                        DialogResult resultado = MessageBox.Show("Se va a dar de baja al Adherente: (" + nombrecompleto + ") del Grupo Familiar, esta seguro?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (resultado == System.Windows.Forms.DialogResult.Yes)
                        {
                            //no esta registrado en la db
                            if (Convert.ToInt32(dgvAdherentes.Rows[fila].Cells[0].Value) == 0)
                            {
                                EliminarRegistroList(fila);
                                ActualizarGrilla();
                            }
                            else // esta registrado en la db
                            {
                                int adherente_id = Convert.ToInt32(dgvAdherentes.Rows[fila].Cells[0].Value);
                                string adherente = dgvAdherentes.Rows[fila].Cells[1].Value + ", " + dgvAdherentes.Rows[fila].Cells[2].Value;
                                frmAdherenteBaja frm = new frmAdherenteBaja(adherente_id);
                                frm.Text = "Baja de Adherente: (" + adherente + ")";

                                //Abro el formulario de baja, si la baja es ok la realizo si no, no.
                                DialogResult dialog = frm.ShowDialog();
                                if (dialog == System.Windows.Forms.DialogResult.Yes)
                                {
                                    EliminarRegistroList(fila);
                                    ActualizarGrilla();
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }

            }


        }

        private void ModificarSocio()
        {
            try
            {
                Socio socio = new Socio();

                socio.id = socio_id;
                socio.numero_certificado = Convert.ToInt32(txtCodigo.Text);
                socio.activo = Convert.ToInt32(ckbActivo.CheckState);
                socio.apellido = txtApellido.Text;
                socio.direccion = txtDireccion.Text;
                socio.documento = txtDocumento.Text;
                socio.fecha_ingreso = dtpFechaIng.Value;
                socio.fecha_nacimiento = dtpFechaNac.Value;
                socio.fecha_ultimopago = dtpFechaPosibleCobro.Value;
                socio.fecha_vencimiento = dtpFechaVen.Value;
                socio.nombres = txtNombres.Text;
                socio.adicional = txtAdicional.Text;
                socio.observaciones = txtObservaciones.Text;
                socio.telefono = txtTelefono.Text;
                socio.zona_id = Convert.ToInt32(cmbZona.SelectedValue);
                socio.localidad_id = Convert.ToInt32(cmbLocalidad.SelectedValue);
                socio.plan_id = Convert.ToInt32(cmbPlan.SelectedValue);
                socio.formapago_id = Convert.ToInt32(cmbFormasPago.SelectedValue);
                socio.formapago = FormasPagos.FindById(Convert.ToInt32(cmbFormasPago.SelectedValue));
                socio.vigencia = dtpVigencia.Value;
                socio.convenio = txtConvenio.Text;
                socio.email = txtEmail.Text;
                socio.pami = Convert.ToInt32(ckbPami.CheckState);
                socio.edad = Convert.ToInt32(txtEdad.Text);
                socio.fecha_posiblecobro = dtpFechaPosibleCobro.Value;
                socio.recargo = Convert.ToDouble(txtRecargo.Text);
                socio.bonificacion = Convert.ToDouble(txtBonificacion.Text);
                socio.cuotafija = Convert.ToInt32(chkFijarCosto.Checked);

                socio.adherentes = _adherentes;

                socio.cuenta_bancaria = _cuenta_bancaria;

                int resultado = Negocio.Socios.Modify(socio);
                if (resultado > 0)
                {
                    MessageBox.Show("Los datos se modificaron correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Ocurrio un error al modificar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ImprimirCertificado(int socio_id)
        {
            frmCertificadoReporte frm = new frmCertificadoReporte(socio_id);
            frm.MdiParent = this.MdiParent;
            frm.Text = "Listados - Certificado de Adhesión de Socios";
            frm.Show();
        }

        private void txtEdad_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEdad.Text))
            {
                CalcularCarencia(dtpFechaIng.Value, Convert.ToInt32(txtEdad.Text));
            }
        }

        private void AgregarRegistroList(Adherente adherente)
        {
            _adherentes.Add(adherente);
        }

        private void ModificarRegistroList(Adherente adherente, int fila)
        {
            _adherentes[fila] = adherente;
        }

        private void EliminarRegistroList(int fila)
        {
            _adherentes.RemoveAt(fila);
        }

        private void ActualizarGrilla()
        {
            dgvAdherentes.Rows.Clear();
            foreach (Adherente fila in _adherentes)
            {
                dgvAdherentes.Rows.Add(fila.id, fila.apellido, fila.nombres, fila.fecha_nacimiento.ToShortDateString(), fila.edad, fila.documento, fila.fecha_ingreso.ToShortDateString(), fila.vigencia.ToShortDateString(), fila.parentesco, fila.localidad.id, fila.localidad.localidad, fila.zona.id, fila.zona.zona);
            }
        }

        private void btnReeimprimirCertificado_Click(object sender, EventArgs e)
        {
            ImprimirCertificado(socio_id);
        }

        private void cmbPlan_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEdad.Text))
            {
                CalcularCostoPlan();
            }
        }

        private void CalcularCostoPlan()
        {
            try
            {
                Socio socio = new Socio();
                socio.activo = Convert.ToInt32(ckbActivo.CheckState);
                socio.apellido = txtApellido.Text;
                socio.direccion = txtDireccion.Text;
                socio.documento = txtDocumento.Text;
                socio.fecha_ingreso = dtpFechaIng.Value;
                socio.fecha_nacimiento = dtpFechaNac.Value;
                socio.fecha_ultimopago = dtpFechaPosibleCobro.Value;
                socio.fecha_vencimiento = dtpFechaVen.Value;
                socio.nombres = txtNombres.Text;
                socio.adicional = txtAdicional.Text;
                socio.observaciones = txtObservaciones.Text;
                socio.telefono = txtTelefono.Text;
                socio.zona_id = Convert.ToInt32(cmbZona.SelectedValue);
                socio.localidad_id = Convert.ToInt32(cmbLocalidad.SelectedValue);
                socio.plan_id = Convert.ToInt32(cmbPlan.SelectedValue);
                socio.formapago_id = Convert.ToInt32(cmbFormasPago.SelectedValue);
                socio.vigencia = dtpVigencia.Value;
                socio.convenio = txtConvenio.Text;
                socio.email = txtEmail.Text;
                socio.pami = Convert.ToInt32(ckbPami.CheckState);
                socio.edad = Convert.ToInt32(txtEdad.Text);
                socio.recargo = Convert.ToDouble(txtRecargo.Text);
                socio.bonificacion = Convert.ToDouble(txtBonificacion.Text);

                socio.adherentes = _adherentes;

                double costo_cuota = PeriodosSocios.CalcularCuota(socio);

                costo_cuota = (costo_cuota + socio.recargo) - socio.bonificacion;

                txtCuota.Text = costo_cuota.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvAdherentes_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEdad.Text))
            {
                CalcularCostoPlan();
            }
        }

        private void dgvAdherentes_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            if (!string.IsNullOrEmpty(txtEdad.Text))
            {
                CalcularCostoPlan();
            }
        }

        private void txtCodigo_TextChanged(object sender, EventArgs e)
        {
            error.Clear();
            if (!string.IsNullOrEmpty(txtCodigo.Text) && string.IsNullOrEmpty(operacion))
            {
                int existe = Negocio.Socios.VerificarNumeroCertificado(Convert.ToInt32(txtCodigo.Text));
                if (existe > 0)
                {
                    error.SetError(txtCodigo, "El Número de Certificado ingresado, se encuentra asignado.");
                }
            }
        }

        private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtCodigo, "Solo se permiten números en el campo Número Certificado.");
                e.Handled = true;
                return;
            }
        }

        private void toolStripButton1_Click_2(object sender, EventArgs e)
        {
            frmServiciosSolicitud frm = new frmServiciosSolicitud(socio_id);
            frm.MdiParent = this.MdiParent;
            frm.Text = "Servicios - Solicitud de Servicio - Grupo Familiar Nro.: " + txtCodigo.Text;
            frm.Show();
        }

        private void cmbFormasPago_SelectionChangeCommitted(object sender, EventArgs e)
        {
            try
            {
                FormaPago forma_pago = FormasPagos.FindById((int)cmbFormasPago.SelectedValue);

                if (forma_pago.debito_automatico == 1)
                    btnCuenta.Enabled = true;
                else
                    btnCuenta.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCuenta_Click(object sender, EventArgs e)
        {
            DialogResult dialog = MessageBox.Show("Desea Registrar la Cuenta Bancaria?", "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dialog == System.Windows.Forms.DialogResult.Yes)
            {
                try
                {
                    error.Clear();
                    Socio socio = Negocio.Socios.FindById(socio_id);

                    frmCuentaBancariaRegistrar frm = new frmCuentaBancariaRegistrar();
                    frm.Text = "Cuenta Bancaria - Afiliado Titular : " + socio.numero_certificado + " - " +
                        socio.apellido + ", " + socio.nombres;

                    DialogResult dialog_form = frm.ShowDialog();
                    if (dialog_form == System.Windows.Forms.DialogResult.OK)
                    {
                        
                            CuentaBancaria cuenta = frm.cuenta;
                            _cuenta_bancaria = cuenta;

                            dgvCuenta.Rows.Add(cuenta.id, cuenta.apellido, cuenta.nombres, cuenta.documento,
                                cuenta.localidad_id, cuenta.localidad.localidad, cuenta.zona_id, cuenta.zona.zona,
                                cuenta.telefono, cuenta.cbu);                       
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void dgvCuenta_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int fila = dgvCuenta.CurrentRow.Index;
            int cuenta_id = (int)dgvCuenta.CurrentRow.Cells[0].Value;
            string cuenta = Environment.NewLine + Environment.NewLine + "Titular: " + dgvCuenta.CurrentRow.Cells[1].Value.ToString() + ", " + dgvCuenta.CurrentRow.Cells[2].Value.ToString() +
                Environment.NewLine + "C.B.U : " + dgvCuenta.CurrentRow.Cells[9].Value.ToString();

            try
            {
                if (dgvCuenta.Rows.Count > 0)
                {
                    if (dgvCuenta.CurrentCell.ColumnIndex.Equals(11))
                    {
                        DialogResult dialog = MessageBox.Show("Se va a eliminar la Cuenta Bancaria, esta seguro? " + cuenta, "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (dialog == System.Windows.Forms.DialogResult.Yes)
                        {
                            //no esta registrado en la db
                            if (cuenta_id == 0)
                            {
                                //borro la cuenta
                                _cuenta_bancaria = null;
                                //quito el item del datagrid
                                dgvCuenta.Rows.RemoveAt(fila);
                            }
                            else //esta registrado en la db
                            {
                                //borro la cuenta
                                _cuenta_bancaria = null;
                                //elimino la cuenta de la db
                                int resultado = CuentasBancarias.Remove(cuenta_id);
                                if (resultado > 0)
                                {
                                    MessageBox.Show("La Cuenta Bancaria se elimino correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    //elimino el item del datagrid
                                    dgvCuenta.Rows.RemoveAt(fila);
                                }
                                else
                                {
                                    MessageBox.Show("Ocurrio un error al eliminar los datos. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }

                            }
                        }
                    }
                }

                if (dgvCuenta.Rows.Count > 0)
                {
                    if (dgvCuenta.CurrentCell.ColumnIndex.Equals(10))
                    {
                        DialogResult dialog = MessageBox.Show("Se va a modificar la Cuenta Bancaria, esta seguro? " + cuenta, "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (dialog == System.Windows.Forms.DialogResult.Yes)
                        {
                            frmCuentaBancariaRegistrar frm = new frmCuentaBancariaRegistrar("Modificar", _cuenta_bancaria);
                            DialogResult dialog_form = frm.ShowDialog();
                            if (dialog_form == System.Windows.Forms.DialogResult.OK)
                            {
                                _cuenta_bancaria = frm.cuenta;

                                dgvCuenta.CurrentRow.Cells[0].Value = _cuenta_bancaria.id;
                                dgvCuenta.CurrentRow.Cells[1].Value = _cuenta_bancaria.apellido;
                                dgvCuenta.CurrentRow.Cells[2].Value = _cuenta_bancaria.nombres;
                                dgvCuenta.CurrentRow.Cells[3].Value = _cuenta_bancaria.documento;
                                dgvCuenta.CurrentRow.Cells[4].Value = _cuenta_bancaria.localidad.id;
                                dgvCuenta.CurrentRow.Cells[5].Value = _cuenta_bancaria.localidad.localidad;
                                dgvCuenta.CurrentRow.Cells[6].Value = _cuenta_bancaria.zona.id;
                                dgvCuenta.CurrentRow.Cells[7].Value = _cuenta_bancaria.zona.zona;
                                dgvCuenta.CurrentRow.Cells[8].Value = _cuenta_bancaria.telefono;
                                dgvCuenta.CurrentRow.Cells[9].Value = _cuenta_bancaria.cbu;

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void dgvServicios_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex.Equals(9))
            {
                int afiliado_id = Convert.ToInt32(dgvServicios.Rows[e.RowIndex].Cells[0].Value);
                frmServiciosSolicitudReporte frmReporte = new frmServiciosSolicitudReporte(afiliado_id);
                frmReporte.MdiParent = this.MdiParent;
                frmReporte.Show();
            }
        }


        private void btnImprimirCupon_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Se va a imprimir el último cupón generado, esta seguro?", "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                if (!String.IsNullOrEmpty(operacion))
                {
                    try
                    {
                        IList<Cupon> cupones = new List<Cupon>();
                        IList<Cupon> cuponesResult = Cupones.FindAllPorSocioId(socio_id);
                        if (cuponesResult.Count != 0)
                        {
                            cupones.Add(cuponesResult[0]);

                            ImpresionCupones impresion = new ImpresionCupones(cupones);
                            impresion.Imprimir();
                        }
                        else
                        {
                            MessageBox.Show("No hay cupones a imprimir.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        private void btnRegistrarCobro_Click(object sender, EventArgs e)
        {
            frmFormaPagoSelector frm = new frmFormaPagoSelector();
            frm.ShowDialog();

        }

        private void txtBonificacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != '.'))
            {
                error.SetError(txtBonificacion, "Solo se permiten números en el campo Bonificación.");
                e.Handled = true;
                return;
            }
        }

        private void txtRecargo_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != '.'))
            {
                error.SetError(txtRecargo, "Solo se permiten números en el campo Recargo.");
                e.Handled = true;
                return;
            }
        }

        private void txtBonificacion_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCuota.Text))
            {
                CalcularCostoPlan();
                txtCuota.Text = (Convert.ToDouble(txtCuota.Text) - Convert.ToDouble(txtBonificacion.Text)).ToString();
            }
        }

        private void txtRecargo_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtCuota.Text))
            {
                CalcularCostoPlan();
                txtCuota.Text = (Convert.ToDouble(txtCuota.Text) + Convert.ToDouble(txtRecargo.Text)).ToString();
            }
        }

        private void chkFijarCosto_CheckedChanged(object sender, EventArgs e)
        {
            if (chkFijarCosto.CheckState == CheckState.Checked)
            {
                if (operacion != "DETALLE")
                {
                    txtCuotaFija.Enabled = true;
                    txtBonificacion.Enabled = true;
                    txtRecargo.Enabled = true;
                }
            }
            else
            {
                txtCuotaFija.Enabled = false;
                txtBonificacion.Enabled = false;
                txtRecargo.Enabled = false;
            }
        }

        private void frmGruposFamiliares_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (guardo == false)
            {
                string mensaje = "Se va a cerrar la ventana, esta seguro?" + Environment.NewLine + Environment.NewLine +
                    "Verifique si guardo los cambios realizados.";

                DialogResult result = MessageBox.Show(mensaje, "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result == System.Windows.Forms.DialogResult.Yes)
                    e.Cancel = false;
                else
                    e.Cancel = true;
            }
        }







    }
}
